package com.fdb.efp.esb.common.client.resp;

import java.io.Serializable;
import java.util.function.Function;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.annotation.JSONField;

/**
 * ESB响应报文对象
 * 
 * @author huangwb
 * @since 2018年12月17日 下午4:09:33
 * @version 1.0
 */
public class EsbRespServiceBean implements Serializable {
	private static final long serialVersionUID = 7374011206856702033L;
	@JSONField(name = "SysHead")
	private EsbRespSysHeadBean sysHead;// ESB响应系统头
	@JSONField(name = "AppHead")
	private EsbRespAppHeadBean appHead;// ESB响应应用头对象
	@JSONField(name = "BODY")
	private String bodyJson;// ESB响应报文体对象

	/* getters and setters */
	public EsbRespSysHeadBean getSysHead() {
		return sysHead;
	}

	public void setSysHead(EsbRespSysHeadBean sysHead) {
		this.sysHead = sysHead;
	}

	public EsbRespAppHeadBean getAppHead() {
		return appHead;
	}

	public void setAppHead(EsbRespAppHeadBean appHead) {
		this.appHead = appHead;
	}

	public String getBodyJson() {
		return bodyJson;
	}
	
	public void setBodyJson(String bodyJson) {
		this.bodyJson = bodyJson;
	}
	/*
	 * 以下方法乃是转换body为对应bean的方法 可自行选择相应策略
	 * 
	 * @author:hengyh
	 */
	/* 直接获取所需bean的使用此方法 */
	public <R> R getBody(Class<R> clazz) {
		return JSONObject.parseObject(bodyJson, clazz);
	}
	/* bean是带泛型的使用此方法 */
	public <R> R getBody(TypeReference<R> typeReference) {
		return JSONObject.parseObject(bodyJson, typeReference);
	}
	/* 想自定义转换的使用此方法 */
	public <R> R getBody(Function<String, R> converter) {
		return converter.apply(bodyJson);
	}
	/* 直接获取json字符串的使用此方法 */
	public String getBody() {
		return bodyJson;
	}

}
